/**
 * 搜索状态管理 Slice
 * 使用 Redux Toolkit 管理搜索相关的状态
 * 包括搜索关键词、搜索结果和加载状态的管理
 */

// src/store/slices/searchSlice.ts
import { createSlice, PayloadAction } from '@reduxjs/toolkit';

/**
 * 搜索状态接口定义
 * @interface SearchState
 * @property {string} searchValue - 搜索关键词
 * @property {any[] | null} searchResults - 搜索结果数组
 * @property {boolean} loading - 加载状态标志
 */
interface SearchState {
  searchValue: string;
  searchResults: any[] | null;
  loading: boolean;
}

/**
 * 初始状态
 * 设置搜索状态的默认值
 */
const initialState: SearchState = {
  searchValue: '',
  searchResults: null,
  loading: false,
};

/**
 * 创建搜索状态切片
 * 包含以下操作：
 * - setSearchValue: 设置搜索关键词
 * - setSearchResults: 设置搜索结果
 * - setLoading: 设置加载状态
 */
const searchSlice = createSlice({
  name: 'search',
  initialState,
  reducers: {
    /**
     * 设置搜索关键词
     * @param state - 当前状态
     * @param action - 包含搜索关键词的字符串
     */
    setSearchValue: (state, action: PayloadAction<string>) => {
      state.searchValue = action.payload;
    },
    /**
     * 设置搜索结果
     * @param state - 当前状态
     * @param action - 包含搜索结果数组
     */
    setSearchResults: (state, action: PayloadAction<any[]>) => {
      state.searchResults = action.payload;
    },
    /**
     * 设置加载状态
     * @param state - 当前状态
     * @param action - 包含加载状态的布尔值
     */
    setLoading: (state, action: PayloadAction<boolean>) => {
      state.loading = action.payload;
    },
  },
});

// 导出 actions 和 reducer
export const { setSearchValue, setSearchResults, setLoading } = searchSlice.actions;
export default searchSlice.reducer;